package com.eco.fanliapp.admin.controller.web;

import com.eco.fanliapp.admin.common.BaseController;
import com.eco.fanliapp.common.response.ServerResponse;
import com.eco.fanliapp.dao.AppOrderDetailMapper;
import com.eco.fanliapp.entity.SyChannelUser;
import com.eco.fanliapp.service.IAppUserService;
import com.eco.fanliapp.service.ISyChannelService;
import com.eco.fanliapp.service.ISyChannelUserService;
import com.eco.fanliapp.utils.DateFormatUtils;
import com.eco.fanliapp.utils.EasyPoiStyleUtils;
import com.eco.fanliapp.utils.EasyPoiUtils;
import com.eco.fanliapp.vo.ChannelUserAffiliationVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * @date 2020-01-12
 */
@RestController
@RequestMapping("/web/channel")
@Slf4j
public class ChannelAffiliationDisposeController extends BaseController {
    @Autowired
    private IAppUserService iAppUserService;
    @Autowired
    private ISyChannelUserService iSyChannelUserService;
    @Autowired
    private AppOrderDetailMapper appOrderDetailMapper;

    /**
     *  将未归属于任何渠道的用户全部归属于自然渠道（渠道邀请码wR9a3L）
     */
    @GetMapping("/dispose")
    public ServerResponse channelAffiliation(){
        //1,查询所有未归属任何出道的全部用户
        List<ChannelUserAffiliationVo> list = iAppUserService.selectChannelUserNotAffiliation();
        /*
        1、如果用户为总公司且未授权，直接将用户归属于自然渠道。
        2、如果用户为总公司且已授权，直接将用户归属于自然渠道。
        3、如果用户为社群分公司且未授权，将用户归属于社群丢失用户渠道（邀请码kIIoSu）且其所属公司不变
        4、如果用户为社群分公司且已授权，将用户归属于社群丢失用户渠道（邀请码kIIoSu）且其所属公司不变
        */
        Integer channel_one = 0;
        Integer channel_two = 0;
        List<SyChannelUser> syChannelUserList = new ArrayList<>();
        if(list != null && list.size() > 0){
            for (ChannelUserAffiliationVo userVo:list
            ) {
                SyChannelUser syChannelUserOne =  iSyChannelUserService.findSyChannelUserById(userVo.getUserId(),1);
                if(syChannelUserOne == null){
                    if(userVo.getCompanyId() == 1){
                        //属于总公司下的用户直接归属到自然渠道（自然渠道id 95）
                        SyChannelUser syChannelUser = new SyChannelUser();
                        syChannelUser.setUserId(userVo.getUserId());
                        syChannelUser.setChannelId(95L);
                        syChannelUser.setChannelName("自然渠道");
                        syChannelUser.setChannelInviteCode("wR9a3L");
                        syChannelUser.setChannelUserStatus(2);
                        syChannelUser.setCreateTime(new Date());
                        syChannelUserList.add(syChannelUser);
                        channel_one++;
                    }else if(userVo.getCompanyId() == 42){
                        //社群分公司，将用户归属于社群丢失用户渠道（渠道id 161, 邀请码kIIoSu）且其所属公司不变
                        SyChannelUser syChannelUser = new SyChannelUser();
                        syChannelUser.setUserId(userVo.getUserId());
                        syChannelUser.setChannelId(161L);
                        syChannelUser.setChannelName("社群丢失用户渠道");
                        syChannelUser.setChannelInviteCode("kIIoSu");
                        syChannelUser.setChannelUserStatus(2);
                        syChannelUser.setCreateTime(new Date());
                        syChannelUserList.add(syChannelUser);
                        channel_two++;
                    }
                }
            }
        }

        if(syChannelUserList != null && syChannelUserList.size() > 0){
            iSyChannelUserService.saveBatch(syChannelUserList);
        }
        log.info("总人数{}，归属自然渠道人数{}，归属社群丢失用户人数{}",list.size(),channel_one,channel_two);
        HashMap map = new HashMap();
        map.put("sum",list.size());
        map.put("nature",channel_one);
        map.put("association",channel_two);
        return ServerResponse.createBySuccess(map);
    }

    @PostMapping("/migration")
    public ServerResponse channelUserMigration(HttpServletResponse response, Long goodsId ,Long starTime,Long endTime){
      /*
        1、社群丢失用户渠道（邀请码kIIoSu），所属分公司为社群部。
        2、社群部每天做APP后返单，会将商品ID告知开发部。
        3、编写程序脚本，将当天购买该商品的后返单的用户整理出来。
        4、对不在“社群丢失用户渠道”的整理出来
        5、对用户进行迁移
        迁移方案：
        1、已归属于非自然渠道的不再统计。
        2、如果用户为总公司没有渠道（或者为自然渠道）归属且已授权，直接将用户归属于“社群丢失用户渠道”并将其公司改为社群部，保留其授权所属联盟账号。
        3、如果用户为总公司已有渠道归属（不是自然渠道）且已授权，不迁移。
        4、如果用户为分公司没有渠道归属且已授权，直接将用户归属于“社群丢失用户渠道”并将其公司改为社群部，保留其授权所属联盟账号。
        5、如果用户为分公司有渠道归属且已授权，不迁移。
        */
/*      //获取当天开始，结束时间戳
        Long starTime = DateFormatUtils.getStartTime();
        Long endTime = DateFormatUtils.getEndTime();*/
      //1根据商品id查询购买用户id,所属公司
        List<ChannelUserAffiliationVo> list = appOrderDetailMapper.selectUserListByGoodsId(goodsId,starTime,endTime);
        List<ChannelUserAffiliationVo> list_one = new ArrayList<>();//归属自然渠道
        List<SyChannelUser> list_two = new ArrayList<>();
        if(list != null && list.size() >0){
            for (ChannelUserAffiliationVo userVo:list
            ) {
                SyChannelUser syChannelUserOne =  iSyChannelUserService.findSyChannelUserById(userVo.getUserId(),1);
                if(userVo.getCompanyId() == 1){
                    //总公司 没有渠道或者为自然渠道

                    if(syChannelUserOne == null){
                        //属于“社群丢失用户渠道”并将其公司改为社群部，保留其授权所属联盟账号
                        iAppUserService.updateAppUserCompanyByUserId(userVo.getUserId(),42);
                        //将用户归属于“社群丢失用户渠道”并将其公司改为社群部
                        SyChannelUser syChannelUser = new SyChannelUser();
                        syChannelUser.setUserId(userVo.getUserId());
                        syChannelUser.setChannelId(161L);
                        syChannelUser.setChannelName("社群丢失用户渠道");
                        syChannelUser.setChannelInviteCode("kIIoSu");
                        syChannelUser.setChannelUserStatus(2);
                        syChannelUser.setCreateTime(new Date());
                        list_two.add(syChannelUser);
                        list_one.add(userVo);
                    }else if(syChannelUserOne != null  && syChannelUserOne.getChannelId() == 95L){
                        //属于“社群丢失用户渠道”并将其公司改为社群部，保留其授权所属联盟账号
                        iAppUserService.updateAppUserCompanyByUserId(userVo.getUserId(),42);

                        SyChannelUser syChannelUser = new SyChannelUser();
                        syChannelUser.setTableId(syChannelUserOne.getTableId());
                        syChannelUser.setUserId(userVo.getUserId());
                        syChannelUser.setChannelId(161L);
                        syChannelUser.setChannelName("社群丢失用户渠道");
                        syChannelUser.setChannelInviteCode("kIIoSu");
                        syChannelUser.setChannelUserStatus(2);
                        list_two.add(syChannelUser);
                        list_one.add(userVo);
                    }

                }else {
                    //分公司没有渠道
                    if(syChannelUserOne == null){
                        //修改所属公司
                        iAppUserService.updateAppUserCompanyByUserId(userVo.getUserId(),42);
                        //将用户归属于“社群丢失用户渠道”并将其公司改为社群部
                        SyChannelUser syChannelUser = new SyChannelUser();
                        syChannelUser.setUserId(userVo.getUserId());
                        syChannelUser.setChannelId(161L);
                        syChannelUser.setChannelName("社群丢失用户渠道");
                        syChannelUser.setChannelInviteCode("kIIoSu");
                        syChannelUser.setChannelUserStatus(2);
                        syChannelUser.setCreateTime(new Date());
                        list_two.add(syChannelUser);
                        list_one.add(userVo);
                    }

                }
            }
        }
        if(list_two != null && list_two.size() > 0){
            iSyChannelUserService.saveOrUpdateBatch(list_two);
        }
        if(list != null && list.size()>0){
            EasyPoiUtils.exportExcel(list, "购买用户", "购买用户", ChannelUserAffiliationVo.class, EasyPoiStyleUtils.class, "userBuy.xls", response);
        }
        if(list_one != null && list_one.size()>0){
            EasyPoiUtils.exportExcel(list_one, "迁移用户", "迁移用户", ChannelUserAffiliationVo.class, EasyPoiStyleUtils.class, "userMigration.xls", response);
        }
        return ServerResponse.createBySuccessMessage("迁移完成");
    }

}
